#ifndef _ABSTRACT_FACTORY_H
#define _ABSTRACT_FACTORY_H

class AbstractProductA;
class AbstractProductB;

class AbstractFactory
{
public:
	AbstractFactory(){}
	virtual ~AbstractFactory(){}

	virtual AbstractProductA* CreateProductA() = 0;
	virtual AbstractProductB* CreateProductB() = 0;
};

class FactoryA : public AbstractFactory
{
public:
	FactoryA() {}
	virtual ~FactoryA(){}

	AbstractProductA* CreateProductA();
	AbstractProductB* CreateProductB();
};

class FactoryB : public AbstractFactory
{
	AbstractProductA* CreateProductA();
	AbstractProductB* CreateProductB();
};

#endif